package org.example.flea_market_mvc.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 订单
 *
 * @author chensanju
 * @date 2025-06-10 12:50:44
 */
@Data
@TableName("orders")
public class Orders {

    /**
     * 订单ID，主键自增
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 订单编号，唯一标识
     */
    private String orderNumber;

    /**
     * 买家用户ID，外键关联users表
     */
    private Integer buyerId;

    /**
     * 卖家用户ID，外键关联users表
     */
    private Integer sellerId;

    /**
     * 商品ID，外键关联products表
     */
    private Integer productId;

    /**
     * 商品数量
     */
    private Integer quantity;

    /**
     * 订单价格，使用BigDecimal避免精度问题
     */
    private BigDecimal price;

    /**
     * 运费
     */
    private BigDecimal shippingFee;

    /**
     * 订单总金额（price + shippingFee）
     */
    private BigDecimal totalAmount;

    /**
     * 优惠金额
     */
    private BigDecimal discountAmount;

    /**
     * 实际支付金额
     */
    private BigDecimal paymentAmount;

    /**
     * 订单状态：1-待支付，2-已支付，3-已发货，4-已收货，5-已完成，6-已取消，7-退款中，8-已退款
     */
    private Integer status;

    /**
     * 支付方式：1-微信支付，2-支付宝，3-货到付款
     */
    private Integer paymentMethod;

    /**
     * 支付交易号
     */
    private String transactionId;

    /**
     * 买家留言
     */
    private String buyerMessage;

    /**
     * 卖家备注
     */
    private String sellerRemark;

    /**
     * 收货地址ID，外键关联user_address表
     */
    private Integer addressId;

    /**
     * 物流单号
     */
    private String logisticsNumber;

    /**
     * 物流公司
     */
    private String logisticsCompany;

    /**
     * 支付时间
     */
    private LocalDateTime paymentTime;

    /**
     * 发货时间
     */
    private LocalDateTime shippingTime;

    /**
     * 收货时间
     */
    private LocalDateTime receiveTime;

    /**
     * 完成时间
     */
    private LocalDateTime completeTime;

    /**
     * 取消时间
     */
    private LocalDateTime cancelTime;

    /**
     * 退款时间
     */
    private LocalDateTime refundTime;

    /**
     * 订单创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 订单更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 逻辑删除标记
     */
    @TableLogic
    private Integer deleted;
}